home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1035 / 1035.xpi / chrome / 1clickweather.jar / content / 1clickweather / js / utils / filemanager.js < prev    next >
Text File  |  2008-10-05  |  13KB  |  345 lines

  1. // ⌐ 2005 The Weather Channel Interactive, Inc.  All Rights Reserved.
  2.  
  3. /*
  4.     FileManager - manager file for file manipulation
  5. */
  6. function FileManager() {
  7.     this.ProfileDir = "ProfD";
  8.     this.configFolder = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  9.     this.configFolder.append("extensions");    
  10.     this.configFolder.append(EXTENSIONID);
  11.     this.configFolder.append("chrome");
  12.     this.configFolder.append("config");
  13.  
  14.     this.appConfigFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  15.     this.appConfigFile.append("extensions");
  16.     this.appConfigFile.append(EXTENSIONID);
  17.     this.appConfigFile.append("chrome");
  18.     this.appConfigFile.append("config");
  19.     this.appConfigFile.append(APPCONFIGFILENAME);
  20.  
  21.  
  22.     this.userConfigFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  23.     this.userConfigFile.append("extensions");
  24.     this.userConfigFile.append(EXTENSIONID);
  25.     this.userConfigFile.append("chrome");
  26.     this.userConfigFile.append("config");
  27.     this.userConfigFile.append(USERCONFIGFILENAME);
  28.  
  29.  
  30.     this.defaultAppConfigFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  31.     this.defaultAppConfigFile.append("extensions");
  32.     this.defaultAppConfigFile.append(EXTENSIONID);
  33.     this.defaultAppConfigFile.append("chrome");
  34.     this.defaultAppConfigFile.append("config");
  35.     this.defaultAppConfigFile.append(DEFAULT_APPCONFIGFILENAME);
  36.  
  37.  
  38.     this.defaultUserConfigFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  39.     this.defaultUserConfigFile.append("extensions");
  40.     this.defaultUserConfigFile.append(EXTENSIONID);
  41.     this.defaultUserConfigFile.append("chrome");
  42.     this.defaultUserConfigFile.append("config");
  43.     this.defaultUserConfigFile.append(DEFAULT_USERCONFIGFILENAME);
  44.  
  45.     this.fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  46.     this.sstream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
  47.     this.foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  48.  
  49.     this.domSerializer = Components.classes["@mozilla.org/xmlextras/xmlserializer;1"].createInstance(Components.interfaces.nsIDOMSerializer);
  50.  
  51. };
  52.  
  53. /*
  54.     FileManager prototype implementation
  55. */
  56. FileManager.prototype = {
  57.     configFolder : null,
  58.     appConfigFile : null,
  59.     userConfigFile : null,
  60.     defaultAppConfigFile : null,
  61.     defaultUserConfigFile : null,
  62.     fstream : null,
  63.     sstream : null,
  64.     foStream : null,
  65.     domSerializer : null,
  66.  
  67.     /*
  68.         makes sure that if older versions of the user config files exist, to update the new ones with
  69.         the old ones, then delete the old ones so that the update does not happen again
  70.  
  71.     */
  72.     updateUserConfigFiles : function() {
  73.         try {
  74.             var i = 0;
  75.             var old_userConfigFile;
  76.             var old_userConfigFileToUse;
  77.             var found = 0;
  78.             for(i=0;i<PREVIOUSUSERCONFIGFILES.length;i++) {
  79.                 //alert("NEXT TO LOOK: " + PREVIOUSUSERCONFIGFILES[i]);
  80.                 old_userConfigFile = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  81.                 old_userConfigFile.append("extensions");
  82.                 old_userConfigFile.append(EXTENSIONID);
  83.                 old_userConfigFile.append("chrome");
  84.                 old_userConfigFile.append("config");
  85.                 old_userConfigFile.append(PREVIOUSUSERCONFIGFILES[i]);
  86.  
  87.                 if(old_userConfigFile.exists()) {
  88.                     //alert("IT EXISTS!!!");
  89.                     old_userConfigFileToUse = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get(this.ProfileDir, Components.interfaces.nsIFile);
  90.                     old_userConfigFileToUse.append("extensions");
  91.                     old_userConfigFileToUse.append(EXTENSIONID);
  92.                     old_userConfigFileToUse.append("chrome");
  93.                     old_userConfigFileToUse.append("config");
  94.                     old_userConfigFileToUse.append(PREVIOUSUSERCONFIGFILES[i]);
  95.                     found = 1;
  96.                 } else {
  97.                     //alert("IT DOES NOT EXIST!!");
  98.                 }
  99.             }
  100.             if(found > 0) {
  101.                 // the old file exists..so we need to delete the "new" file first and then rename the "old" file
  102.                 this.userConfigFile.remove(false);
  103.                 old_userConfigFileToUse.copyTo(this.configFolder, USERCONFIGFILENAME);
  104.                 // ok now remove the old one so this wont happen again!
  105.                 old_userConfigFileToUse.remove(false);
  106.             } else {
  107.                 //alert("NOTHING FOUND TO COPY OVER!!");
  108.             }
  109.        } catch(e) {
  110.             //alert("ERROR: " + e);
  111.        }
  112.     },
  113.  
  114.     /*
  115.         returns the list of files in the "config" directory
  116.     */
  117.     getConfigFolderFileList : function() {
  118.         var entries = this.configFolder.directoryEntries;
  119.         var files = new Array();
  120.         while (entries.hasMoreElements()) {
  121.             var entry = entries.getNext();
  122.             entry = entry.QueryInterface(Components.interfaces.nsIFile);
  123.             var name = entry.leafName;
  124.         }
  125.         return entries;
  126.     },
  127.  
  128.     /*
  129.         returns raw content of the app config data file
  130.     */
  131.     getAppConfigFileData : function() {
  132.         var data = "";
  133.         this.fstream.init(this.appConfigFile, 1, 0, false);
  134.         this.sstream.init(this.fstream);
  135.         var str = this.sstream.read(-1);
  136.         while (str.length > 0) {
  137.             data += str;
  138.             str = this.sstream.read(-1);
  139.         }
  140.  
  141.         this.sstream.close();
  142.         this.fstream.close();
  143.         return data;
  144.     },
  145.  
  146.     /*
  147.         returns raw content of the default app config data file!
  148.     */
  149.     getDefaultAppConfigFileData : function() {
  150.         var data = "";
  151.         this.fstream.init(this.defaultAppConfigFile, 1, 0, false);
  152.         this.sstream.init(this.fstream);
  153.         var str = this.sstream.read(-1);
  154.         while (str.length > 0) {
  155.             data += str;
  156.             str = this.sstream.read(-1);
  157.         }
  158.  
  159.         this.sstream.close();
  160.         this.fstream.close();
  161.         return data;
  162.     },
  163.  
  164.     /*
  165.         returns dom representation of the app config data file
  166.     */
  167.     getAppConfigDOM : function() {
  168.         var xmlDoc = document.implementation.createDocument("", "", null);
  169.         if (xmlDoc.readyState == null) {
  170.             xmlDoc.readyState = 1;
  171.             xmlDoc.addEventListener("load", function () {
  172.                 xmlDoc.readyState = 4;
  173.                 if (typeof xmlDoc.onreadystatechange == "function")
  174.                     xmlDoc.onreadystatechange();
  175.                 }, false);
  176.             }
  177.         xmlDoc.async=false;
  178.         xmlDoc.loadXML(this.getAppConfigFileData());
  179.         // we need to check if xml that we got is "valid"!!!!
  180.         // to do that we check the root element and/or the document namespace
  181.         var roottag = xmlDoc.documentElement;
  182.         if ((roottag.tagName == "parserError") || (roottag.namespaceURI == "http://www.mozilla.org/newlayout/xml/parsererror.xml")){
  183.           // not well-formed xml was entered--in this case only thing we can do is get the "default"
  184.           // configuration and use it!!
  185.           //alert("using default appconfig info!");
  186.           xmlDoc.loadXML(this.getDefaultAppConfigFileData());
  187.         }
  188.         return xmlDoc;
  189.     },
  190.  
  191.     /*
  192.         stores app config file from text
  193.     */
  194.     storeAppConfigFromText : function(data) {
  195.         this.foStream.init(this.appConfigFile, 0x02 | 0x08 | 0x40, 420, 0);
  196.         this.foStream.write(data, data.length);
  197.         this.foStream.close();
  198.     },
  199.  
  200.     /*
  201.         stores app config file from DOM object
  202.     */
  203.     storeAppConfigFromDOM : function(domdata) {
  204.         this.foStream.init(this.appConfigFile, 0x02 | 0x08 | 0x40, 420, 0);
  205.         var strdata = domdata.xml;
  206.         this.foStream.write(strdata, strdata.length);
  207.         this.foStream.close();
  208.     },
  209.  
  210.     /*
  211.         returns raw content of the user config data file
  212.     */
  213.     getUserConfigFileData : function() {
  214.         var data = "";
  215.         this.fstream.init(this.userConfigFile, 1, 0, false);
  216.         this.sstream.init(this.fstream);
  217.         var str = this.sstream.read(-1);
  218.         while (str.length > 0) {
  219.             data += str;
  220.             str = this.sstream.read(-1);
  221.         }
  222.  
  223.         this.sstream.close();
  224.         this.fstream.close();
  225.         return data;
  226.     },
  227.  
  228.     /*
  229.         returns raw content of the default user config data file
  230.     */
  231.     getDefaultUserConfigFileData : function() {
  232.         var data = "";
  233.         this.fstream.init(this.defaultUserConfigFile, 1, 0, false);
  234.         this.sstream.init(this.fstream);
  235.         var str = this.sstream.read(-1);
  236.         while (str.length > 0) {
  237.             data += str;
  238.             str = this.sstream.read(-1);
  239.         }
  240.  
  241.         this.sstream.close();
  242.         this.fstream.close();
  243.         return data;
  244.     },
  245.  
  246.     /*
  247.         returns dom representation of the user config data file
  248.     */
  249.     getUserConfigDOM : function() {
  250.         var xmlDoc = document.implementation.createDocument("", "", null)
  251.         if (xmlDoc.readyState == null) {
  252.             xmlDoc.readyState = 1;
  253.             xmlDoc.addEventListener("load", function () {
  254.                 xmlDoc.readyState = 4;
  255.                 if (typeof xmlDoc.onreadystatechange == "function")
  256.                     xmlDoc.onreadystatechange();
  257.                 }, false);
  258.             }
  259.         xmlDoc.async=false;
  260.         try{
  261.            xmlDoc.loadXML(this.getUserConfigFileData());
  262.         }catch(e){ // if we can't load the real on, load the default
  263.            xmlDoc.loadXML(this.getDefaultUserConfigFileData());
  264.            return(xmlDoc);
  265.         }
  266.         // we need to check if xml that we got is "valid"!!!!
  267.         // to do that we check the root element and/or the document namespace
  268.         var roottag = xmlDoc.documentElement;
  269.         if ((roottag.tagName == "parserError") || (roottag.namespaceURI == "http://www.mozilla.org/newlayout/xml/parsererror.xml")){
  270.           // not well-formed xml was entered--in this case only thing we can do is get the "default"
  271.           // configuration and use it!!
  272.           xmlDoc.loadXML(this.getDefaultUserConfigFileData());
  273.           //alert("using default userconfig info!");
  274.         }
  275.         return xmlDoc;
  276.     },
  277.  
  278.     /*
  279.         stores user config file
  280.     */
  281.     storeUserConfigFromText : function(data) {
  282.         var date = new Date();
  283.         // first move the current file to a backup
  284.         this.userConfigFile.remove(false);
  285.         // now create the new file
  286.         this.foStream.init(this.userConfigFile, 0x02 | 0x08 | 0x40, 420, 0);
  287.         this.foStream.write(data, data.length);
  288.         this.foStream.close();
  289.     },
  290.  
  291.     /*
  292.         stores user config file
  293.     */
  294.     storeUserConfigFromDOM : function(domdata) {
  295.         this.foStream.init(this.userConfigFile, 0x02 | 0x08 | 0x40, 420, 0);
  296.         var strdata = domdata.xml;
  297.         this.foStream.write(strdata, strdata.length);
  298.         this.foStream.close();
  299.     },
  300.  
  301.     /*
  302.         returns representation of config directory
  303.     */
  304.     getConfigFolder : function() {
  305.         return this.configFolder;
  306.     },
  307.  
  308.     saveUserConfigToFile : function(node) {
  309.     
  310.         var fileOutputStream = 
  311.           Components.classes["@mozilla.org/network/file-output-stream;1"].
  312.             createInstance(Components.interfaces.nsIFileOutputStream);
  313.     
  314.     
  315.         fileOutputStream.init(this.userConfigFile, 0x20 | 0x02,00004,null);
  316.             
  317.         this.domSerializer.serializeToStream(node, fileOutputStream, 'UTF-8');
  318.         fileOutputStream.close();
  319.       
  320.       /*
  321.       var fostream = Components.classes["@mozilla.org/network/file-output-stream;1"]
  322.                         .createInstance(Components.interfaces.nsIFileOutputStream);
  323.       
  324.       if(fostream.isWritable()){
  325.         
  326.         // 0x02 | 0x10 to open file for appending
  327.         fostream.init(this.userConfigFile,0x02|0x08|0x20,664,0); // write, create, truncate
  328.         fostream.write(node,node.length);
  329.         fostream.close();        
  330.  
  331.       }else{
  332.         alert("The file " + this.userConfigFile + " is not writable");
  333.       }
  334.       */
  335.       
  336.     },
  337.  
  338.     saveAppConfigToFile : function(node) {
  339.         var fileOutputStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
  340.         fileOutputStream.init(this.appConfigFile, 0x20 | 0x02,00004,null);
  341.         this.domSerializer.serializeToStream(node, fileOutputStream, 'UTF-8');
  342.         fileOutputStream.close();
  343.     }
  344. };
  345.